public class TestDemo {
    /**
     * Trowable
     * 一.错误   error
     *
     *
     * 二.异常  Exception
     *          1、受查异常(编译时异常):没运行的时候就报错(异常)
     *              ①CloneNotSupportedException
     *              ②ClassNotFoundException
     *              ③IOException
     *              ...等等
     *          2、非受查异常(运行时异常):运行的时候报错(异常)
     *          所有运行处异常都是继承于
     *          RuntimeException的
     *
     *          ①ArithmeticeException 算数异常
     *          ②ClassCastException 类型转换异常
     *          ③lllegalArgumentException 参数异常
     *          ④llegalStateException
     *          ⑤IndexOutOfBoundsException 下标异常
     *          ⑥NoSuchElementException
     *          ⑦NullPointerException 空指针异常
     *          ...等等
     *
     *  非RuntimeException一般是外部错误(非Error)，其必须被 try{}catch语句块所捕获
     */

    //防御式编程
    /**
     * 防御式编程
     * 错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿. 我们有两种主要的方式
     * LBYL: Look Before You Leap. 在操作之前就做充分的检查.
     * EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到
     * 问题再处理.
     *
     * java处理异常就是EAFP风格的代码
     */

//    java处理异常就是EAFP风格的代码,先抛出异常再处理例如:

    /**
     * 如果try抛出的异常没有被catch捕获,或者说这个代码里没有处理异常.那么这个异常会交给jvm进行处理
     * 程序就会立即终止
     * @param args
     */
    public static void main1(String[] args) {
        //catch放的是将来可能会发生的异常的类型
        try{
            //try里放可能会发生的异常
            System.out.println(10/0);
            System.out.println("异常下面的代码不会被执行了 ");//这句话不会被打印,只要try抛出的异常被catch被捕获到,
            // 那么其后面的代码将不会继续执行,而去执行catch里面的代码
            //如果抛出异常没处理,则直接寄了,交给jvm,程序终止
        }catch(ArithmeticException e){
            //捕获对应的异常
            System.out.println("捕获了算数异常");
        }
        System.out.println("eeesss");

    }
}
